三维坐标变换——旋转矩阵与旋转向量

用 opencv 进行过双目相机标定的同学都知道,单目标定 calibrateCamera() 函数能够对每一张标定图像计算出一对 rvec 和 tvec,即旋转平移向量,代表世界坐标系到相机坐标系的转换关系。而 stereoCalibrate() 函数则可以计算出旋转矩阵 R 和平移向量 T,代表左右相机坐标系之间的转换关系。同样是坐标变换,平移倒总是向量,但旋转怎么有时是向量,有时又是矩阵呢?


旋转矩阵

参考csxiaoshui的博客,三维旋转变换可以看成是矩阵乘法运算,即:

xyz=Rxyz [ x ′ y ′ z ′ ] = R ∗ [ x y z ]
其中 R R 就是三阶的旋转矩阵。仅仅考虑绕 X Y Y Z 单个轴旋转 θ θ (右手螺旋), R R 分别为:
RX=[1000cosθsinθ0sinθcosθ]RY=[cosθ0sinθ010sinθ0cosθ]RZ=[cosθsinθ0sinθcosθ0001]
绕任意轴旋转则可以分解成绕三个坐标轴旋转的叠加,最终得到的旋转矩阵 R R 便是上述三个矩阵的乘积。

矩阵运算显然是计算机三维坐标变换最简单方便的计算方法,因此在 opencv、opengl、工业机器人等开发中,提到位姿旋转变换,多半用的是旋转矩阵。然而,用矩阵来表示一个旋转关系有两个缺点:
首先,通过旋转矩阵不能直观地看出旋转的方向和角度,假设给定一个旋转矩阵,要求旋转方向不变,旋转角度变成一半,那么新的旋转矩阵计算起来就比较麻烦了。
另一方面,旋转变换本身只有3个自由度,但旋转矩阵有9个元素,因此旋转矩阵中的元素不是相互独立的,这在非线性优化中会带来问题。


旋转向量

向量旋转公式最早由 Rodrigues 提出,用一个三维向量来表示三维旋转变换,该向量的方向是旋转轴,其模则是旋转角度。百度百科中有其详细的介绍与推导,我在这边只列一下最重要的公式。
设旋转向量的单位向量为 r,模为 θ θ 。三维点(或者说三维向量) p p 在旋转向量 r 的作用下变换至 p p ′ ,则:

p=cosθp+(1cosθ)(pr)r+sinθr×p p ′ = cos ⁡ θ ⋅ p + ( 1 − cos ⁡ θ ) ( p ⋅ r ) r + sin ⁡ θ ⋅ r × p
显然,旋转向量代表的变换关系十分直观,但运算上要比矩阵形式更加复杂。


相互转换

用矩阵形式和向量形式表示旋转变换各有优劣势,因此经常需要来回转换,这里跟数学中的李群与李代数有所关联,本人目前还一知半解,可以参考半闲居士的博客
opencv 中有函数 Rodrigues() 用于旋转矩阵和旋转向量的转换。参照opencv文档,设旋转向量的单位向量 r=[rx ry rz]T r = [ r x   r y   r z ] T ,旋转角度为 θ θ ,对应的旋转矩阵为 R R ,则 r R R 的转换是:

R=cosθI+(1cosθ)rrT+sinθ[0rzryrz0rxryrx0]
其中 I I 是三阶单位矩阵。反过来 R r r 的转换则可以利用等式:
RRT2=sinθ[0rzryrz0rxryrx0]

opencv 官方文档中的原话是:

A rotation vector is a convenient and most compact representation of a rotation matrix (since any rotation matrix has just 3 degrees of freedom). The representation is used in the global 3D geometry optimization procedures like calibrateCamera, stereoCalibrate, or solvePnP .

称旋转向量是旋转矩阵方便而且最紧凑的表示方法,被用于一些需要全局三维几何优化的函数中。

  • 34
    点赞
  • 177
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
在刚体运动中,我们可以使用旋转矩阵旋转向量和平移矩阵来描述坐标变换旋转矩阵一个3x3的正交矩阵,用来表示旋转的方向和角度。然而,旋转矩阵有一些缺点,比如冗余和约束条件。为了更紧凑地描述旋转,我们可以使用旋转向量,它只需要一个三维向量来表示旋转的轴和角度。旋转向量旋转矩阵之间可以通过罗德里格斯公式进行转换。平移矩阵用来描述坐标系的平移变换。在刚体运动中,坐标系的平移变换和旋转变换是相互独立的。因此,我们可以使用旋转矩阵和平移矩阵来描述刚体的运动。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [刚体运动中的坐标变换-旋转矩阵旋转向量、欧拉角及四元数](https://blog.csdn.net/hu_hao/article/details/117197727)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [三维空间坐标系变换-旋转矩阵](https://blog.csdn.net/baobei0112/article/details/114065256)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值